司开星的博客

Dash Docset 创建指南

Dash 是 Macos 上一款热门的API查询工具,可以用来查询很多常用语言/框架的官方文档。Windows 平台有类似的应用zeal和velocity。

本文基于Dash官方文档所写,如有错误欢迎指正。

从其他文档格式转换

Docset 支持从其他标准文档格式转换。

Python 文档(Sphinx、PyDoctor) 可以使用doc2dash模块转换。另外还需用到sphinx模块。两个模块均使用pip安装。

由于直接转换格式比较容易,此处不赘述,具体步骤可以参考官方文档。

从HTML 中提取转换

有些文档只有HTML 版本,比如笔者需要的PyQt4的本地文档。由于HTML文档没有统一的格式,要从HTML转换到Docset需要自己写程序。

根据官方的步骤:

创建Docset 文件夹

Mac下使用如下命令创建:
mkdir -p <docset name>.docset/Contents/Resources/Documents/

Windows 下直接新建这几级文件夹,最顶层文件夹名最后要加上.docset

将HTML 文档放入文件夹下

第二步是把本地的HTML文档放入刚刚创建的 <docset name>.docset/Contents/Resources/Documents/ 文件夹下。

这里要提到一点,Dash右侧显示文档的部分基本上就是个HTML阅读器,所以我们需要把HTML文档放到文件夹里供Dash显示。但光有显示的文档还不够,Dash最好用的功能的是直接搜索方法名等并点击跳转到对应的文档位置。接下来我们需要去处理索引部分。

创建一个Info.plist 文件

下载Info.plist,并根据你自己的意愿修改里面的内容。具体项代表什么这里就不多解释,可参考官方文档。修改好之后将Info.plist文件放入<docset name>.docset/Contents/文件夹内。

创建SQLite 索引

Docset的查询索引使用SQLite存储。我们需要在<docset name>.docset/Contents/Resources/内创建一个数据库文件docSet.dsidx。创建表的SQL命令如下:

CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);

写入索引数据

终于到最后一步,写入索引到数据库中。只要把这三个值:值(name),类型(type),路径(path)存储到数据库中,Dash就可以搜索到这个项。比如我想在Dash中直接搜索到PyQt4中QLineEdit类的isReadOnly()方法,我需要添加如下三个值:

  • name: isReadOnly
  • type: Method
  • path: qlineedit.html#isReadOnly

name对应的是在Dash左侧搜索到的项名。type则是Dash内置的项类型,在Dash界面对应的是搜索项名时名称前面的字母图标,Method的图标就是一个M。Dash内置的所有类型可以在这里找到。你想把这项显示成什么类型就填对应的字符串。最后一个值path,对应的是此项在HTML文档中的路径。

之后就是用你熟悉的语言在HTML文档中找到这些值,然后写入到数据库中。写入语句为:

INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES ('name', 'type', 'path');

这里是我写的把PyQt4 的HTML文档转换成Docset的Python程序,可供参考。